package com.starblink.basic.livedata

/**
 * 使用LiveData发送数据时，如果希望数据只能被消费一次，可以使用该类对数据进行包装
 * 使用场景：仅当LiveData只有一个观察者，又希望避免数据倒灌时使用
 * 注意：如果有多个观察者，谁可以收到数据是不确定的
 */
open class Event<out T>(private val content: T) {

    var hasBeenHandled = false
        private set // Allow external read but not write

    /**
     * Returns the content and prevents its use again.
     */
    fun getContentIfNotHandled(): T? {
        return if (hasBeenHandled) {
            null
        } else {
            hasBeenHandled = true
            content
        }
    }

    /**
     * Returns the content, even if it's already been handled.
     */
    fun peekContent(): T = content
}

